package com.hnkywl.sts.service.organ;

import com.google.gson.Gson;
import com.hnkywl.sts.dao.organ.QyfrDao;
import com.hnkywl.sts.entity.organ.Qyfr;
import com.hnkywl.sts.util.BaseUtils;
import com.hnkywl.sts.util.ReflectionUtils;
import net.ruixin.orm.hibernate.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 说明：
 * 包:        com.hnkywl.sts.service.organ
 * 类描述:    企业法人服务类
 * 修改备注: [说明本次修改内容]
 * 版本:        [v1.0]
 */
@Service
public class QyfrService {
    private QyfrDao qyfrDao;

    /**
     * 查询企业法人列表
     * @param qyqc   企业全称
     * @param fddlr   法定代表人
     * @param nsh   纳税号
     * @param pageNo  页数
     * @param pageSize 每页显示记录数
     * @return
     */
    @Transactional
    public String findAllQyfr(String qyqc,String fddlr,String nsh,int pageNo, int pageSize){
        Page<Qyfr> qyfrPage = this.qyfrDao.findQyfrList(qyqc,fddlr,nsh,pageNo, pageSize);
        List<Qyfr> qyfrList = qyfrPage.getResult() == null?new ArrayList<Qyfr>():qyfrPage.getResult();
        String qyfrJson = BaseUtils.fetchCollectionToJson(qyfrList,"id","qyqc","qyjc","fddlr","dh","bgdz","nsh","bz","khh","zh","nskhh","lx");
        return "{\"total\":" + qyfrPage.getTotalCount() + ",\"rows\":[" + qyfrJson + "]}";
    }

    /**
     * 查询企业法人名称列表
     * @param qyqc   企业全称
     * @param fddlr   法定代表人
     * @param nsh   纳税号
     * @param pageNo  页数
     * @param pageSize 每页显示记录数
     * @return
     */
    @Transactional
    public String findQyfrMc(String qyqc,String fddlr,String nsh,int pageNo, int pageSize) {
        Page<Qyfr> qyfrPage = this.qyfrDao.findQyfrList(qyqc,fddlr,nsh,pageNo, pageSize);
        List<Qyfr> qyfrList = qyfrPage.getResult() == null ? new ArrayList<Qyfr>() : qyfrPage.getResult();
        String qyfrJson = BaseUtils.fetchCollectionToJson(qyfrList, "id", "qyqc","fddlr","dh");
        return "[" + qyfrJson + "]";
    }

    /**
     * 查询企业法人明细
     * @param id 企业法人id
     * @return
     */
    @Transactional
    public Qyfr findQyfrDetail(Long id) {
        return this.qyfrDao.get(id);
    }

    public String getQyfrTreeJson() {
        return this.qyfrDao.getQyfrTreeJson();
    }

    //内部企业法人
    @Transactional
    public String findNbQyfr() {
        List<Qyfr> nbqyfrList = qyfrDao.findAllNbQyfr() == null ? new ArrayList<Qyfr>() : qyfrDao.findAllNbQyfr();
        String nbJson = BaseUtils.fetchCollectionToJson(nbqyfrList, "id", "qyqc");
        return "[" + nbJson + "]";
    }
    //外部企业法人
    @Transactional
    public String findWbQyfr() {
        List<Qyfr> wbqyfrList = qyfrDao.findAllWbQyfr() == null ? new ArrayList<Qyfr>() : qyfrDao.findAllWbQyfr();
        String wbJson = BaseUtils.fetchCollectionToJson(wbqyfrList, "id", "qyqc","fddlr","dh");
        return "[" + wbJson + "]";
    }

    public String findByJcOrQc(String jc,String qc,Long id,Integer maxRows){
        return new Gson().toJson(qyfrDao.findByJcOrQc(jc,qc,id,maxRows));
    }
    /**
     * 保存企业法人信息
     * @param qyfr 企业法人
     * @return
     */
    @Transactional
    public void saveQyfr(Qyfr qyfr) throws RuntimeException {
        qyfr.setDateCreated(new Date());
        qyfr.setLastUpdated(qyfr.getDateCreated());
        this.qyfrDao.save(qyfr);
    }

    /**
     * 更新企业法人信息
     * @param qyfr 企业法人
     * @return
     */
    @Transactional
    public void updateQyfr(Qyfr qyfr) throws RuntimeException {
        Qyfr fr = this.qyfrDao.get(qyfr.getId());
        fr = (Qyfr)ReflectionUtils.getInstance(fr, qyfr);
        fr.setLastUpdated(new Date());
        this.qyfrDao.save(fr);
    }

    /**
     * 删除企业法人信息
     * @param id 企业法人id
     * @return
     */
    @Transactional
    public void deleteQyfr(Long id) {
        Qyfr qyfr = qyfrDao.get(id);
        if(qyfr.getNbgsList()==null||qyfr.getNbgsList().size()!=0){
            throw new RuntimeException("此企业法人已被使用，不能删除！");
        }
        if(qyfr.getQyjgList()==null||qyfr.getQyjgList().size()!=0){
            throw new RuntimeException("此企业法人已被使用，不能删除！");
        }
        qyfr.setLastUpdated(new Date());
        qyfr.setDeleted(1);
        this.qyfrDao.save(qyfr);
    }

    /**
     * ajax远程验证
     * @param value 验证值
     * @param field 验证字段
     * @return
     */
    public boolean ajaxValidate(Long id,String value, String field) {
        return qyfrDao.checkUnique(id,value,field);
    }

    @Autowired
    public void setQyfrDao(QyfrDao qyfrDao) {
        this.qyfrDao = qyfrDao;
    }

}
